草庐IT

c++ - SIMD C++ 库

全部标签

c++ - 在 C 项目中使用 Eigen

我正在做一个从Internet获得的C项目,我正在尝试向该项目添加一些涉及线性代数的函数。在我以前的C++工作中,我通常依赖Eigen来进行线性代数。有没有办法将Eigen用于C项目?如果是,我应该怎么做才能让它发挥作用?(仅仅添加Eigen头文件是不够的,因为例如标准C++文件不会自动包含在内) 最佳答案 Eigen是一个库,它大量使用C++中不存在的功能。因此,它不能直接从C翻译单元使用。但是,您可以将使用Eigen的部分包装在一个单独的共享库中,并公开一个C接口(interface)。这是一个如何编写这样一个库的小例子。图书馆

c++ - 防止编译器不断折叠表达式的技巧

我的程序中有一个字符串文字,我正在尝试创建一个业余校验和以确保该字符串文字没有在可移植可执行文件中被替换。为此,我创建了字符串文字的散列,并将其作为整数文字存储在程序中。现在我有两个文字,一个用于字符串,一个用于散列。在我的代码中,我通过使用以相同方式散列字符串文字的函数来实现校验和,我创建了一个新的运行时散列并根据散列文字检查该散列。问题当然是,通过编译器优化,它可能会预先计算运行时哈希,然后我会根据哈希文字检查哈希文字,并且校验和将始终返回true。所以我正在寻找一种技巧,让编译器认为字符串文字是一个动态字符串,可以是任何东西,这样它就不会对运行时哈希进行常量折叠优化,并且我的代码

c++ - 1亿节点大图的C++表示

我正在处理一个非常大的图,它有5亿个节点,节点的平均度为100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个vector,如下所示//Vcouldbe100millionvector*AdjList=newvector[V];vector*Weight=newvector[V];使用vector的vector似乎不节省空间。它需要超过400GB的存储空间。有没有更好的节省空间的方法来将这个大图存储在内存中?有使用任何C++库的建议吗? 最佳答案 初步说明您可以考虑使用vector的vector而不是使用动态内存分

c++ - 在 C++ 代码中使用的 C header 中转发声明枚举

你不能forwarddeclareanenuminC++,但你可以在C中。对于使用一些C++代码的C代码库,有没有一种方法可以在C中使用前向声明的枚举,当在C++中使用该header时(在extern"C"中)不会导致错误{..}block)?例子:extern"C"{enumMyEnum;}intmain(){return0;}GCC给出错误:error:useofenum‘MyEnum’withoutpreviousdeclarationenumMyEnum;^~~~~~Clang也失败了:error:ISOC++forbidsforwardreferencesto'enum'ty

c++ - 是否可以在不修改 C++ 的情况下使用 C11 原子包含 C header ?

我正在尝试编写使用thisClibrary在C++应用程序中未经修改。它使用C11原子。考虑以下程序,我们可以将其放入名为main.cc的文件中。#include"mpscq.h"intmain(){}如果我用g++-std=c++11-cmain.cc编译它,我会得到一整套错误,如下所示。usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdatomic.h:68:9:error:‘_Atomic’doesnotnameatypetypedef_Atomic__UINT_FAST32_TYPE__atomic_uint_fast32_t;^/usr/

c++ - 为什么构建没有预编译头文件的 DLL 在使用时会出现奇怪的错误?

总结:今天我发现在构建一个没有预编译头文件的DLL时,当您尝试使用它时会出现一个奇怪的错误。当禁用预编译header时,构建DLL会很顺利。但是,一旦附加了DLL(编译时或运行时),它就会导致错误“参数无效”。两种情况的实际错误代码都不同。附加编译时时会弹出错误代码为0xc000000d的对话框,调用LoadLibrary()时会返回NULL指针,而GetLastError()会返回0x57.编辑:我发现当增量链接被禁用时问题就消失了。在运行附加到DLL编译时的客户端时,我以某种方式错过了VisualStudio显示的以下错误:'TestClient.exe':Loaded'D:\Pr

c++ - 我如何查看 Linux .so 或 .a 对象并查看它们包含哪些函数?

链接器大概可以做到这一点,那么是否有一个命令行工具可以列出目标文件中的函数并告诉我函数的名称及其签名? 最佳答案 对于共享库,您必须使用:nm-D/path/to/libwhatever.so.没有-D,nm转储debug符号;-D指的是实际用于动态链接的动态符号。来自Ubuntu12session:$nm/lib/i386-linux-gnu/libc.so.6nm:/lib/i386-linux-gnu/libc.so.6:nosymbols$nm-D/lib/i386-linux-gnu/libc.so.6|tail0011f

c++ - C++ 'new' 关键字和 C

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:UsethekeywordclassasavariablenameinC++在库的C头文件中,我使用的变量之一名为“new”。不幸的是,我在C++项目中使用这个库,并且“new”作为变量名的出现吓坏了编译器。我已经在使用extern"C"{#include},但这在这方面似乎没有帮助。我是否必须要求库开发人员更改该变量的名称,即使从他的角度来看,作为C开发人员,代码绝对没问题,因为“new”不是C关键字?

c++ - 插件系统如何工作?

我正在做一个项目,我会发现一个有用的基本插件系统。本质上,我创建基类并可以将这个基类提供给插件开发人员。然后开发人员覆盖它并覆盖方法。然后这就是我变得有点不清楚的地方。它是如何工作的?在哪里可以找到与此类系统开发相关的文档?谢谢 最佳答案 我所知道的插件系统都使用动态库。基本上,您需要在系统内核和插件之间定义一个小而有效的握手。由于没有C++ABI,插件必须要么只使用CAPI,要么使用与系统内核完全相同的编译器(可能是编译器版本)。最简单的可想到的协议(protocol)是一个函数,所有插件开发人员都必须提供该函数,它返回从您的基类

c++ - 对于 malloc() 失败是否有等效的 set_new_handler()?

在C++中,你can安排一个函数在new失败时调用。有没有办法在malloc失败时调用一个函数?假设正在从我不想更改的第三方库调用malloc。我认为没有可移植的答案,所以我很乐意接受特定于平台的答案。我在某些平台上使用Linux+uclibc,在其他平台上使用Linux+glibc。我打算使用setrlimit限制malloc可以返回的内存量。 最佳答案 malloc如果失败则返回NULL。您应该处理它,以及CRT内存函数的其他故障(realloc尤其容易出错)。在一般情况下,我认为您必须将内存的所有CRT使用包装在您自己设计的函